package com.example.demo.sevice.imp;

import com.example.demo.controller.data.ReturnData;
import com.example.demo.controller.vo.RegisterVo;
import com.example.demo.dao.AdminDao;
import com.example.demo.dao.CircleDao;
import com.example.demo.dao.CommentDao;
import com.example.demo.dao.UserDao;
import com.example.demo.entity.Admin;
import com.example.demo.entity.Comment;
import com.example.demo.entity.User;
import com.example.demo.sevice.AdminService;
import com.example.demo.util.TokenUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.sql.Timestamp;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 管理类接口实现类
 */
@Service
public class AdminServelmp implements AdminService {

    @Resource
    AdminDao adminDao;
    @Autowired
    RedisTemplate redisTemplate;

    @Override
    public ReturnData login(String username, String passwprd) {
        //调用数据库操作类，查找对应表里有没有数据匹配
        List<Admin> users = adminDao.findByUsernameAndPasswprd(username,passwprd);
        if (users.size() > 0){//如果有，登录成功
            //存入缓存
            redisTemplate.opsForValue().set("wx"+users.get(0).getUsername() ,users);
            HashMap map = new HashMap( );
            map.put("token", TokenUtil.getToken(users.get(0).getUsername()));
            users.get(0).setPasswprd("");
            map.put("userInfo",users.get(0));
            return ReturnData.ok(map,"登录成功");//获取token
        }else {//查找不到对应的用户数据
            return ReturnData.error("用户名或密码错误");//此时要在前端显示该内容
        }
    }

    @Resource
    UserDao userDao;
    @Override
    public ReturnData getUserList(int page, int limit, String nickname) {
        List<Map <String,Object>> list = userDao.getList((page - 1) * limit,limit,nickname);

        long count = userDao.count();//表里面有多少条数据
        long num;
        if (count % limit == 0){
            num = count / limit;
        }else {
            num = count / limit + 1;
        }
        HashMap map = new HashMap();
        map.put("list",list); //当前页码的数据
        map.put("total",num); //总页码数据
        return ReturnData.ok(map);
    }

    @Override
    public ReturnData deleteUser(int id) {
        User user = userDao.findById(id).get();//根据用户ID查找用户
        if(user == null){
            return ReturnData.error("用户不纯在");
        }
        userDao.delete(user);
        return ReturnData.ok("删除成功");
    }

    @Override
    public ReturnData updateUserInfo(RegisterVo user) {
        User userDb;
        if (user.getId()==0){ //新增用户
            userDb = new User();
            if (StringUtils.isEmpty(user.getUsername())){//如果前端没有传过来的昵称不为空
                return ReturnData.error("用户名不能为空");
            }
            List<User> byUsername = userDao.findByUsername(user.getUsername());
            if (byUsername.size()>0){
                return ReturnData.error("用户名已被使用");
            }
            userDb.setUsername(user.getUsername());//设置用户名
            if (StringUtils.isEmpty(user.getPassword())){
                return ReturnData.error("密码不能够为空");
            }
            userDb.setRegister_time(new Timestamp(System.currentTimeMillis()));
        }else {//编辑用户
            userDb = userDao.findById(user.getId()).get();
        }
        if (!StringUtils.isEmpty(user.getNickname())){//如果前端传过来的昵称不为空
            userDb.setNickname(user.getNickname());
        }
        if (!StringUtils.isEmpty(user.getAvtar())){//如果前端传过来的头像不为空
            userDb.setAvtar(user.getAvtar());
        }
        if (!StringUtils.isEmpty(user.getPhone())){//如果前端传过来的手机号不为空
            userDb.setPhone(user.getPhone());
        }
        if (user.getSex()!=0){//如果前端传过来的性别不为空
            userDb.setSex(user.getSex());
        }
        if (user.getAge()!=0){//如果前端传过来的年龄不为空
            userDb.setAge(user.getAge());
        }
        if (!StringUtils.isEmpty(user.getEmail())){
            userDb.setEmail(user.getEmail());
        }
        if (!StringUtils.isEmpty(user.getPassword())){//如果前端传过来的手机不为空
            userDb.setPassword(user.getPassword());
        }
        userDao.save(userDb);
        return ReturnData.ok("修改用户信息成功");
    }

    @Resource
    CircleDao circleDao;
    @Override
    public ReturnData getCircleList(int page, int pageSize) {
        List<Map<String,Object>> list = circleDao.getAdminList((page - 1) * pageSize,pageSize);

        long count = circleDao.count(); //表里有多少条数据
        long num;
        if (count % pageSize == 0){
            num = count / pageSize;
        }else {
            num = count / pageSize + 1;
        }
        HashMap map = new HashMap();
        map.put("list",list); //当前页码数量
        map.put("total",num); //总页码数量
        return ReturnData.ok(map);
    }

    @Resource
    CommentDao commentDao;
    @Override
    public ReturnData getCommentList(int page,int pageSize,int cirleId){
        List<Map<String,Object>> adminComment = commentDao.getAdminComment(cirleId,(page-1) * pageSize,pageSize);
        int count = commentDao.getCount(cirleId);//获取总数量

        long num;//总页码，一共有多少页
        if (count % pageSize == 0){
            num = count / pageSize;
        }else {
            num = count / pageSize;
        }
        HashMap map = new HashMap();
        map.put("list",adminComment);//当前页码的数据
        map.put("total",num);//总页码数据
        return ReturnData.ok(map);
    }

    @Override
    public ReturnData deleteComment(int id){
        Comment comment = commentDao.findById(id).get();
        if (comment==null){
            return ReturnData.error("评论不纯在");
        }
        commentDao.delete(comment);
        return ReturnData.ok("删除成功");
    }
}
